import pandas as pd
import numpy as np
from datetime import datetime, timedelta
import os
import time
import requests
import hashlib

# ---------------------- 配置参数 ----------------------
# 数据存储路径（需与复盘程序路径一致）
SAMPLE_DATA_PATH = "数据存储路径/"  # 请替换为实际路径
# ------------------------------------------------------

def get_api(url):
    """调用API获取数据"""
    try:
        response = requests.get(url, timeout=30)  # 添加超时控制
        response.raise_for_status()  # 检查HTTP请求是否成功
        data = response.json()
        
        # 检查返回数据结构是否正确
        if "rows" not in data:
            print("API返回数据格式错误，缺少'rows'字段")
            return None
        
        rows = data["rows"]
        if not rows:  # 空数据处理
            print("API返回数据为空")
            return None
            
        df = pd.DataFrame(rows)
        return df
    except requests.exceptions.RequestException as e:
        print(f'API请求失败：{str(e)}，30秒后重试')
        time.sleep(30)
        return None
    except Exception as e:
        print(f'数据解析错误：{str(e)}')
        return None
    
def codeName(name):
    """生成加密密钥"""
    str_data = name + 'yao2024'
    md5 = hashlib.md5()
    md5.update(str_data.encode('utf-8'))
    return md5.hexdigest()


def get_kzz():
    """获取转债数据"""
    # 生成API密钥
    api_key = codeName("8886696606")
    url = f'http://110.41.82.66/prod-api/bond/plus0622?key={api_key}'
    
    # 调用API获取数据
    股票池 = get_api(url)
    
    # 数据校验与处理
    if 股票池 is not None:
        # 检查必要字段是否存在
        required_cols = ['bond_premium']  # 可根据实际需求添加其他必要字段
        missing_cols = [col for col in required_cols if col not in 股票池.columns]
        if missing_cols:
            print(f"数据缺少必要字段：{missing_cols}")
            return None
        
        # 转换溢价率为数值类型
        股票池['bond_premium'] = pd.to_numeric(股票池['bond_premium'], errors='coerce')
        print(f"成功获取数据，共有{len(股票池['bond_premium'])}条数据")
        
        return 股票池
    else:
        print("未获取到有效数据")
        return None


def save_kzz_data():
    """保存转债数据到Excel"""
    # 获取当天日期（格式：YYYYMMDD）
    today = datetime.now().strftime("%Y%m%d")
    # 生成文件名
    filename = f"{today}_全量数据.xlsx"
    # 完整保存路径
    save_path = os.path.join(SAMPLE_DATA_PATH, filename)
    
    # 确保存储目录存在
    os.makedirs(SAMPLE_DATA_PATH, exist_ok=True)
    
    # 获取数据
    股票池 = get_kzz()
    if 股票池 is None or 股票池.empty:
        print("无数据可保存")
        return False
    
    # 保存数据到Excel
    try:
        # 需要安装openpyxl库（pip install openpyxl）
        股票池.to_excel(save_path, index=False, engine='openpyxl')
        print(f"数据已成功保存至：{save_path}")
        return True
    except Exception as e:
        print(f"保存Excel失败：{str(e)}")
        return False


# ---------------------- 主程序 ----------------------
if __name__ == "__main__":
    # 执行数据获取与保存
    save_kzz_data()